package pruebas.testDesplazadores;

import org.junit.*;
import static org.junit.Assert.*;
import modelo.desplazadores.DesplazadorZigZag;
import modelo.util.Vector;
import static modelo.SetUps.TURNOS_PARA_ZIGZAG;

public class TestDesplazadorZigZag {
	private Vector pos = new Vector(0,0);
	private Vector dir = new Vector(1,1);
	private Vector dirVersor = dir.versor();
	private Vector dirVersorXNegativo = new Vector(-1,1).versor();
	private float vel = 1;
	private DesplazadorZigZag desp;
	
	@Before
	public void setUp(){
		desp = new DesplazadorZigZag(pos, dir, vel);
	};

	@Test
	public void testMover(){
		for ( int i = 0; i < TURNOS_PARA_ZIGZAG; i++) {
			desp.mover();
		}
		assertEquals("No avanzo por su TURNOS_PARA_ZIGZAG veces",desp.getPosicion(), dirVersor.multiplicar(TURNOS_PARA_ZIGZAG) );		
		desp.mover();
		assertEquals("No zigzagueo",desp.getPosicion(), dirVersor.multiplicar(TURNOS_PARA_ZIGZAG).sumar(dirVersorXNegativo) );		
		for ( int i = 0; i < TURNOS_PARA_ZIGZAG-1; i++) {
			desp.mover();
		}
		assertEquals("No volvio al punto de partida en x",desp.getPosicion().getx() , 0 , 0.001);		
		assertTrue("Volvio al punto de partida en y",desp.getPosicion().gety() != 0);		
		desp.mover();
		assertTrue("No volvio a aumentar en x",desp.getPosicion().getx() > 0);			
		}
	
	@Test
	public void testRetroceder(){
		desp.retroceder();
		
		for ( int i = 0; i < TURNOS_PARA_ZIGZAG; i++) {
			desp.mover();
		}
		assertEquals("No retrocedio por su TURNOS_PARA_ZIGZAG veces",desp.getPosicion(), dirVersor.multiplicar(TURNOS_PARA_ZIGZAG).multiplicar(-1) );		
		desp.mover();
		assertEquals("No zigzagueo",desp.getPosicion(), dirVersor.multiplicar(TURNOS_PARA_ZIGZAG).multiplicar(-1).restar(dirVersorXNegativo) );		
		for ( int i = 0; i < TURNOS_PARA_ZIGZAG-1; i++) {
			desp.mover();
		}
		assertEquals("No volvio al punto de partida en x",desp.getPosicion().getx() , 0 , 0.001);		
		assertTrue("Volvio al punto de partida en y",desp.getPosicion().gety() != 0);		
		desp.mover();
		assertTrue("No volvio a disminuir en x",desp.getPosicion().getx() < 0);			
		}
	
}
